package br.com.petshow.dao;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.petshow.model.Agendamentos;
import br.com.petshow.utils.SqlField;

public class AgendamentosDao extends GenericDao<Agendamentos> {

	public AgendamentosDao() {
		setTableName("AGENDAMENTOS");
		setSequenceName("SQ_ID_AGENDAMENTOS");
	}
	
	@Override
	public void insertOrUpdate(Agendamentos o) throws SQLException {
		setFields(o);
		super.insertOrUpdate(o);
	}

	@Override
	public void delete(Agendamentos o) {
		super.delete(o);
	}
	
	private void setFields(Agendamentos o) {
		List<SqlField> fields = new ArrayList<SqlField>();

		SqlField idAnimais = new SqlField("id_animais",o.getAnimal().getId());
		SqlField idServicos = new SqlField("id_servicos",o.getServico().getId());
		SqlField data = new SqlField("data",o.getData());
		
		fields.add(idAnimais);
		fields.add(idServicos);
		fields.add(data);
		
		setFieldsToInsertOrEdit(fields);
	}

	@Override
	public Agendamentos tratarRetorno(ResultSet rs) throws SQLException {
		Agendamentos agenda = new Agendamentos();
		rs.next();
		ResultSetMetaData rsmd = rs.getMetaData();
		
		AnimaisDao animaisDao = new AnimaisDao();
		ServicosDao servicosDao = new ServicosDao();
		
		for(int i = 1; i <= rsmd.getColumnCount(); i++) {
			switch (rsmd.getColumnName(i).toLowerCase()) {
			case "id":
				agenda.setId(rs.getInt("id"));
				break;
			case "id_animais":
				agenda.setAnimal(animaisDao.getObjectById(rs.getInt("id_animais")));
				break;
			case "id_servicos":
				agenda.setServico(servicosDao.getObjectById(rs.getInt("id_servicos")));
				break;
			case "data":
				agenda.setData(rs.getDate("data"));
				break;
			default:
				break;
			}
		}
		
		return agenda;
	}

	@Override
	public List<Agendamentos> tratarRetornoList(ResultSet rs) throws SQLException {
		List<Agendamentos> retorno = new ArrayList<Agendamentos>();
		
		AnimaisDao animaisDao = new AnimaisDao();
		ServicosDao servicosDao = new ServicosDao();
		
		while(rs.next()) {
			Agendamentos agenda = new Agendamentos();
			ResultSetMetaData rsmd = rs.getMetaData();
			
			for(int i = 1; i <= rsmd.getColumnCount(); i++) {
				switch (rsmd.getColumnName(i).toLowerCase()) {
				case "id":
					agenda.setId(rs.getInt("id"));
					break;
				case "id_animais":
					agenda.setAnimal(animaisDao.getObjectById(rs.getInt("id_animais")));
					break;
				case "id_servicos":
					agenda.setServico(servicosDao.getObjectById(rs.getInt("id_servicos")));
					break;
				case "data":
					agenda.setData(rs.getDate("data"));
					break;
				default:
					break;
				}
			}
			retorno.add(agenda);
		}

		return retorno;
	}

	
}
